package visual;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Collections;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SpringLayout;
import model.Ciudad;
import model.Juego;

public class Ciudades extends JFrame {
	
	private static final long serialVersionUID = 1L;
	private static JButton ciudad1;
	private static  JButton ciudad2;
	private static JButton ciudad3;
	private static JButton cancelar;
	
	private static Ciudad ciu1;
	private static Ciudad ciu2;
	private static Ciudad ciu3;
	
	private JPanel panel;
	private Juego juego;
	
	ArrayList<Ciudad> ciudades= new ArrayList<Ciudad>();

	
	private InterfazPrincipal interfazContenedora;
	
	
	public Ciudades(Juego juego, InterfazPrincipal ip){
		super("Ciudades");
		this.juego = juego;
		this.interfazContenedora = ip;
		setBounds(700, 200, 360, 150);
		SpringLayout layout = new SpringLayout();
		panel = new JPanel(layout);
		this.ciudades= this.interfazContenedora.getCiudadesMundo();
		inciar();
		
//Handler
		Handler handler = new Handler ();
		
		
		ciudad1 = new JButton(ciu1.obtenerNombre().toUpperCase());
		ciudad1.addActionListener(handler);
		
		layout.putConstraint(SpringLayout.WEST, ciudad1, 20, SpringLayout.WEST, panel);
		layout.putConstraint(SpringLayout.NORTH, ciudad1, 5,  SpringLayout.NORTH, panel);
		
		
		ciudad2 = new JButton(ciu2.obtenerNombre().toUpperCase());
		ciudad2.addActionListener(handler);
		layout.putConstraint(SpringLayout.WEST, ciudad2, 5, SpringLayout.EAST, ciudad1);
		layout.putConstraint(SpringLayout.NORTH, ciudad2, 5,  SpringLayout.NORTH, panel);
		
		ciudad3 = new JButton(ciu3.obtenerNombre().toUpperCase());
		ciudad3.addActionListener(handler);
		layout.putConstraint(SpringLayout.WEST, ciudad3, 5, SpringLayout.EAST, ciudad2);
		layout.putConstraint(SpringLayout.NORTH, ciudad3, 5,  SpringLayout.NORTH, panel);
		
		cancelar = new JButton("VOLVER");
		cancelar.addActionListener(handler);
		layout.putConstraint(SpringLayout.WEST, cancelar, 15, SpringLayout.EAST, ciudad1);
		layout.putConstraint(SpringLayout.NORTH, cancelar, 25,  SpringLayout.SOUTH, ciudad2);
		
		
		panel.add(ciudad1);
		panel.add(ciudad2);
		panel.add(ciudad3);
		panel.add(cancelar);
		add(panel);
		
	}
	
		private class Handler implements ActionListener {
		
		public void actionPerformed(ActionEvent event){
					
			if(event.getSource() == ciudad1){
				
				juego.moverJugadorACiudad(ciu1);
				interfazContenedora.actualizarInterfaz();
			}
			else{ if(event.getSource() == ciudad2){
				
				juego.moverJugadorACiudad(ciu2);
				interfazContenedora.actualizarInterfaz();
				  }
				  else{ if(event.getSource() == ciudad3){
					
					  juego.moverJugadorACiudad(ciu3);
					  interfazContenedora.actualizarInterfaz();   
				  		}
				  		else{if(event.getSource() == cancelar){
				  			interfazContenedora.actualizarInterfaz();
				  			dispose();		
				  			}
				  		}
				  }
			}
		}
		}

		public ArrayList<Ciudad> actualizarOpciones (ArrayList<Ciudad> ciudades){
			ArrayList<Ciudad> opciones= new ArrayList<Ciudad>();
			Ciudad prox= this.juego.obtenerProximaCiudad();
			Ciudad actual= this.juego.obtenerJugador().obtenerCiudadActual();
			opciones.add(prox);
			while (opciones.size() != 3){
				Ciudad candidato1 = ciudades.get((int)(Math.random()*ciudades.size()));
				Ciudad candidato2 = ciudades.get((int)(Math.random()*ciudades.size()));
				if((candidato1 != candidato2) && (candidato1 != prox) && (candidato2 != prox)&& (candidato1 != actual) && (candidato2 != actual)){ opciones.add(candidato1); opciones.add(candidato2);}
			}	
		return opciones;	
		}
		
		public void actualizarCiudades (){
			ArrayList<Ciudad> opciones= new ArrayList<Ciudad>();
			opciones = actualizarOpciones(this.ciudades);
			Collections.shuffle(opciones);
			ciu1= opciones.get(0);
			ciu2= opciones.get(1);
			ciu3= opciones.get(2);
			
			ciudad1.setText(ciu1.obtenerNombre().toUpperCase());
			ciudad2.setText(ciu2.obtenerNombre().toUpperCase());
			ciudad3.setText(ciu3.obtenerNombre().toUpperCase());	
		}
		
		public void inciar (){
			ArrayList<Ciudad> opciones= new ArrayList<Ciudad>();
			opciones = actualizarOpciones (this.ciudades);
			Collections.shuffle(opciones);
			ciu1= opciones.get(0);
			ciu2= opciones.get(1);
			ciu3= opciones.get(2);
			
			}
		
		
		
		
}
		